import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutterdemo/0demo/provider/02my_demo/provider_data/common_data.dart';
import 'package:provider/provider.dart';

class TabViewWidget3 extends StatefulWidget {
  @override
  _TabViewWidget3State createState() => _TabViewWidget3State();
}

class _TabViewWidget3State extends State<TabViewWidget3> with AutomaticKeepAliveClientMixin {
  UserModel userModel;

  @override
  Widget build(BuildContext context) {
    print("page 3 build");
//    userModel = context.select((CommonData commonData) => commonData.userModel);
//    userModel = context.watch<CommonData>().userModel;
    ///我们要知道当使用Provider.of时，除非我们设置了listen:false，否则只要Provider.of中接收的数据发生了变化，
    ///与Provider.of中的BuildeContext相关的控件都会进行重新构建。这当然是我们期望的行为，
    ///但有时候这可能会引起不必要的过多的重绘。
    ///一种解决方案就是使用Consumer 见tab_view_widget4
    //
    //作者：JarvanMo
    //链接：https://juejin.im/post/6844904182676209677
    //来源：掘金
    //著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
    userModel = Provider.of<CommonData>(context).userModel;

    return Container(
      padding: EdgeInsets.all(20.w),
      child: Card(
        child: Column(
          children: <Widget>[
            Text(_getLatestUserInfo()),
            FlatButton(
              onPressed: _changeUserModel,
              child: Text("修改UserModel"),
            )
          ],
        ),
      ),
    );
  }

  String _getLatestUserInfo() {
    return userModel == null ? "null" : userModel.toString();
  }

  void _changeUserModel() {
    context.read<CommonData>().changeUserModel();
  }

  @override
  bool get wantKeepAlive => true;
}
